<?php

Class BankAccountsController extends AppController {

    public $name = 'BankAccounts';

    private function send_mail($tipo, $proyect_id) {
        App::import('Vendor', 'ClassPhpmailer', array('file' => 'phpmailer/class.phpmailer.php'));
        App::Import('Model', 'Proyect');
        App::Import('Model', 'User');
        App::Import('Model', 'UserProyect');

        $this->layout = "ajax";

        $body = "";

        $Proyect = new Proyect();
        $Proyect->recursive = -1;

        //$proyecto = $Proyect->find('first', array('conditions' => array('Proyect.id' => $proyect_id, 'Call_id' => 1), 'fields' => array('Proyect.codigo')));
        $User = new User();
        $User->recursive = -1;
        $UserProyect = new UserProyect();
        $UserProyect->recursive = 2;

//Buscar información de usuario responsable
        $responsable = $User->find('first', array('recursive' => -1, 'conditions' => array('User.id' => $this->Auth->user('id')), 'fields' => array('User.email', 'User.nombre', 'User.primer_apellido', 'User.segundo_apellido')));

//Buscar información sobre el código del proyecto y el correo del director territorial
        $proyecto = $Proyect->find('first', array('joins' => array(array('table' => 'branches', 'alias' => 'Branch', 'type' => 'left', 'conditions' => array('Branch.id=Proyect.branch_id'))), 'conditions' => array('Proyect.id' => $proyect_id), 'fields' => array('Proyect.codigo', 'Branch.email')));
//Buscar información sobre la persona que tiene asignado el proyecto.
        $revisor = $UserProyect->find('first', array('conditions' => array('UserProyect.proyect_id' => $proyect_id, 'User.group_id' => '30'), 'fields' => array('User.email', 'User.nombre', 'User.primer_apellido', 'User.segundo_apellido'), 'order' => array('UserProyect.id' => 'DESC')));

//Agregar texto de acuerdo al tipo de acción
        switch ($tipo) {
            case 1:
                //se agrega nuevo archivo
                $body .= "<p><h1>Se ha cargado el archivo de certificación bancaria del proyecto " . $proyecto['Proyect']['codigo'] . "</h1></p>";
                break;
            case 2:
                //se modifica un archivo
                $body .= "<p><h1>Se ha modificado el archivo de certificación bancaria del proyecto " . $proyecto['Proyect']['codigo'] . "</h1></p>";
                break;
        }
        $body.="<p>Encargado de adjuntar documentos: " . $responsable['User']['nombre'] . " " . $responsable['User']['primer_apellido'] . " " . $responsable['User']['segundo_apellido'] . " " . $responsable['User']['email'] . "</p>";
        if (!empty($revisor))
            $body.="<p>Encargado de la revisión de documentos: " . $revisor['User']['nombre'] . " " . $revisor['User']['primer_apellido'] . " " . $revisor['User']['segundo_apellido'] . " " . $revisor['User']['email'] . "</p>";

        $mail = new PHPMailer();

//Luego tenemos que iniciar la validación por SMTP: 
        $mail->IsSMTP();
        $mail->SMTPAuth = true;
        $mail->Host = "ssl://smtp.gmail.com"; // SMTP a utilizar. Por ej. smtp.elserver.com 
        $mail->Username = "sitrural@gmail.com"; // Correo completo a utilizar 
        $mail->Password = "laropavieja.net.co"; // Contraseña 
        $mail->Port = 465; // Puerto a utilizar 
//Con estas pocas líneas iniciamos una conexión con el SMTP. Lo que ahora deberíamos hacer, es configurar el mensaje a enviar, el //From, etc. 
        $mail->From = "sitrural@gmail.com"; // Desde donde enviamos (Para mostrar) 
        $mail->FromName = "Soporte aplicativo tierras";

//Estas dos líneas, cumplirían la función de encabezado (En mail() usado de esta forma: “From: Nombre <correo@dominio.com>”) de //correo. 

        $mail->AddAddress($responsable['User']['email']);
        $mail->AddAddress($proyecto['Branch']['email']);
        $mail->AddAddress($revisor['User']['email']);
        $mail->AddAddress('pilarfg64@hotmail.com');

        $mail->IsHTML(true);
//$mail->IsHTML(true); // El correo se envía como HTML 
        $mail->Subject = utf8_decode("CARGA DE INFORMACIÓN CUENTA BANCARIA PROYECTO. " . $proyecto['Proyect']['codigo'] . " "); // Este es el titulo del email. 

        $mail->Body = utf8_decode($body); // Mensaje a enviar 
//$mail->SMTPDebug = 1;

        $exito = $mail->Send(); // Envía el correo. 
//También podríamos agregar simples verificaciones para saber si se envió: 
        if ($exito) {
            $this->Session->setFlash("Sus datos fueron enviados correctamente ");
        } else {
            $this->Session->setFlash("Error :  " . $mail->ErrorInfo);
        }
    }

    public function add($proyect_id) {
        $this->layout = "ajax";
        //obtengo el codigo del proyecto
        App::Import('Model', 'Proyect');
        $proyecto = new Proyect();
        $proyecto->recursive = -1;

        $codigo = $proyecto->field('Proyect.codigo', array('Proyect.id' => $proyect_id));

        //obtengo el id de la resolución del proyecto.
        App::Import('Model', 'Resolution');
        $resolucion = new Resolution();
        $resolucion->recursive = -1;

        $resolution_id = $resolucion->field('Resolution.id', array('Resolution.proyect_id' => $proyect_id), 'Resolution.id DESC');


        //se verifica que el archivo de la resolución se haya cargado
        $rutaDocumento = APP . "webroot" . "/" . "files" . "/" . $codigo . "/" . 'SoporteResolucion-' . $codigo . '-' . $resolution_id;
        if (file_exists($rutaDocumento . ".pdf")) {
            if (empty($this->data)) {
                App::Import('Model', 'Candidate');
                $aspirantes = new Candidate();
                $aspirantes->recursive = -1;
                $this->set('proyect_id', $proyect_id);
                $this->set('candidates', $aspirantes->find('all', array('conditions' => array('Candidate.proyect_id' => $proyect_id, 'Candidate.estado_filtro' => array(1, 5, 6)), 'fields' => array('Candidate.id', 'Candidate.1er_apellido', 'Candidate.2do_apellido', 'Candidate.1er_nombre', 'Candidate.2do_nombre', 'Candidate.nro_ident'), 'order' => array('Candidate.1er_apellido' => 'ASC'))));
            } else {
                if ($this->BankAccount->saveAll($this->data)) {
                    $lastId = $this->BankAccount->getInsertID();
                    App::Import('Model', 'Proyect');
                    $Proyect = new Proyect();
                    $Proyect->recursive = -1;
                    $proyecto = $Proyect->find('first', array('conditions' => array('Proyect.id' => $proyect_id), 'fields' => array('Proyect.codigo')));
                    $codigo = $proyecto['Proyect']['codigo'];
                    $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo;

                    if (!is_dir($rutaArchivo)) {
                        if (!mkdir($rutaArchivo)) {
                            echo "error creando archivo";
                            //redirect
                        }
                    }
                    $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/Pagos";
                    if (!is_dir($rutaArchivo)) {
                        if (!mkdir($rutaArchivo)) {
                            echo "error creando archivo";
                            //redirect
                        }
                    }
                    $nombreArchivo = "bancaria-$codigo-$lastId";
                    $this->BankAccount->id = $lastId;
                    $this->BankAccount->saveField('adjunto', 'files/' . $codigo . "/Pagos/" . $nombreArchivo);
                    $nombreArchivo = $nombreArchivo . ".pdf";
                    $rutaArchivo.= "/" . $nombreArchivo;

                    if (move_uploaded_file($this->data['BankAccount']['archivo']['tmp_name'], $rutaArchivo)) {
                        //envío el correo informando 
                        $this->send_mail(1, $this->data['BankAccount']['proyect_id']);
                        $this->Session->setFlash('Registro Adicionado correctamente', 'flash_custom');
                        $this->redirect(array('controller' => 'BankAccounts', 'action' => 'index', $proyect_id));
                    } else {
                        $this->Session->setFlash('No se pudo adjuntar archivo', 'flash_custom');
                        $this->redirect(array('controller' => 'BankAccounts', 'action' => 'index', $proyect_id));
                    }
                } else {
                    $this->Session->setFlash('Error Guardando datos');
                }
            }
        } else {
            $this->Session->setFlash('Aún no se ha adjuntado el archivo de la resolución de adjudicación.', 'flash_custom');
            $this->redirect(array('controller' => 'BankAccounts', 'action' => 'index', $proyect_id));
        }
    }

    public function addProperties($expense_property_id) {
        $this->layout = "ajax";
        if (empty($this->data)) {
            $this->set('expense_property_id', $expense_property_id);
            $proyect_id = $this->Session->read('proy_id');
            $this->set('proyect_id', $proyect_id);
        } else {

            if ($this->BankAccount->saveAll($this->data)) {
                $lastId = $this->BankAccount->getInsertID();
                App::Import('Model', 'Proyect');
                $Proyect = new Proyect();
                $Proyect->recursive = -1;
                $proyecto = $Proyect->find('first', array('conditions' => array('Proyect.id' => $this->data['BankAccount']['proyect_id']), 'fields' => array('Proyect.codigo')));
                $codigo = $proyecto['Proyect']['codigo'];
                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo;

                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        //redirect
                    }
                }
                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/Pagos";
                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        //redirect
                    }
                }

                $nombreArchivo = "bancaria-$codigo-$lastId";
                $this->BankAccount->id = $lastId;
                $this->BankAccount->saveField('adjunto', 'files/' . $codigo . "/Pagos/" . $nombreArchivo);
                $nombreArchivo = $nombreArchivo . ".pdf";
                $rutaArchivo.= "/" . $nombreArchivo;
                try {
                    move_uploaded_file($this->data['BankAccount']['archivo']['tmp_name'], $rutaArchivo);
                    $this->Session->setFlash('Registro Adicionado correctamente', 'flash_custom');
                    $this->redirect(array('controller' => 'BankAccounts', 'action' => 'indexProperties', $expense_property_id));
                } catch (Exception $exc) {
                    echo $exc->getMessage();
                    $this->Session->setFlash('No se pudo adjuntar archivo', 'flash_custom');
                    $this->redirect(array('controller' => 'BankAccounts', 'action' => 'indexProperties', $expense_property_id));
                }
            } else {
                $this->Session->setFlash('Error Guardando datos');
            }
        }
    }

    public function edit($id) {
        $this->layout = "ajax";
        $this->BankAccount->recursive = -1;
        if (empty($this->data)) {
            App::Import('Model', 'Candidate');
            $proyect_id = $this->Session->read('proy_id');
            $aspirantes = new Candidate();
            $aspirantes->recursive = -1;
            $this->set('candidates', $aspirantes->find('all', array('conditions' => array('Candidate.proyect_id' => $proyect_id, 'Candidate.estado_filtro' => array(1, 5, 6)), 'fields' => array('Candidate.id', 'Candidate.1er_apellido', 'Candidate.2do_apellido', 'Candidate.1er_nombre', 'Candidate.2do_nombre', 'Candidate.nro_ident'), 'order' => array('Candidate.1er_apellido' => 'ASC'))));
            $this->data = $this->BankAccount->find('first', array('conditions' => array('BankAccount.id' => $id), 'fields' => array('BankAccount.candidate_id', 'BankAccount.nombre_banco', 'BankAccount.tipo_titular', 'BankAccount.proyect_id', 'BankAccount.numero_cuenta', 'BankAccount.sucursal', 'BankAccount.tipo_cuenta', 'BankAccount.nombre_titular', 'BankAccount.documento_titular', 'BankAccount.controlada', 'BankAccount.adjunto', 'BankAccount.id')));
        } else {
            App::Import('Model', 'Proyect');
            $Proyect = new Proyect();
            $Proyect->recursive = -1;
            $proyecto = $Proyect->find('first', array('conditions' => array('Proyect.id' => $this->data['BankAccount']['proyect_id']), 'fields' => array('Proyect.codigo')));
            $codigo = $proyecto['Proyect']['codigo'];
            $nombreArchivo = "bancaria-$codigo-" . $this->data['BankAccount']['id'];
            $this->data['BankAccount']['adjunto'] = "files/$codigo/Pagos/" . $nombreArchivo;
            $nombreArchivo = $nombreArchivo . ".pdf";
            if ($this->BankAccount->saveAll($this->data)) {
                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo;

                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/Pagos";
                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        //redirect
                    }
                }

                $rutaArchivo.= "/" . $nombreArchivo;
                if (move_uploaded_file($this->data['BankAccount']['archivo']['tmp_name'], $rutaArchivo)) {
                    //envío el correo informando 
                    $this->send_mail(2, $this->data['BankAccount']['proyect_id']);
                    $this->Session->setFlash('Archivo cargado con éxito', 'flash_custom');
                    $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
                } else {
                    $this->Session->setFlash('No es posible cargar el archivo', 'flash_custom');
                    $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
                }
            } else {
                $this->Session->setFlash('Error editando datos');
            }
        }
    }

    public function editProperties($id, $expense_property_id) {
        $this->layout = "ajax";
        $this->BankAccount->recursive = -1;
        if (empty($this->data)) {
            $proyect_id = $this->Session->read('proy_id');
            $this->data = $this->BankAccount->find('first', array('conditions' => array('BankAccount.id' => $id), 'fields' => array('BankAccount.valor', 'BankAccount.nombre_banco', 'BankAccount.tipo_titular', 'BankAccount.proyect_id', 'BankAccount.numero_cuenta', 'BankAccount.sucursal', 'BankAccount.tipo_cuenta', 'BankAccount.nombre_titular', 'BankAccount.documento_titular', 'BankAccount.controlada', 'BankAccount.adjunto', 'BankAccount.id')));
            $this->set('expense_property_id', $expense_property_id);
        } else {
            App::Import('Model', 'Proyect');
            $Proyect = new Proyect();
            $Proyect->recursive = -1;
            $proyecto = $Proyect->find('first', array('conditions' => array('Proyect.id' => $this->data['BankAccount']['proyect_id']), 'fields' => array('Proyect.codigo')));
            $codigo = $proyecto['Proyect']['codigo'];
            $nombreArchivo = "bancaria-$codigo-" . $this->data['BankAccount']['id'];
            $this->data['BankAccount']['adjunto'] = "files/$codigo/Pagos/" . $nombreArchivo;
            $nombreArchivo = $nombreArchivo . ".pdf";
            if ($this->BankAccount->saveAll($this->data)) {
                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo;

                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/Pagos";
                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        //redirect
                    }
                }

                $rutaArchivo.= "/" . $nombreArchivo;
                try {
                    move_uploaded_file($this->data['BankAccount']['archivo']['tmp_name'], $rutaArchivo);
                    $this->Session->setFlash('Registro editado correctamente', 'flash_custom');
                    $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
                } catch (Exception $exc) {
                    echo $exc->getMessage();
                    $this->Session->setFlash('Registro editado correctamente', 'flash_custom');
                    ////*
                    $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
                }
            } else {
                $this->Session->setFlash('Error editando datos');
            }
        }
    }

    public function calification($id) {
        $this->layout = "ajax";
        $this->BankAccount->recursive = -1;
        if (empty($this->data)) {

            $this->data = $this->BankAccount->find('first', array('conditions' => array('BankAccount.id' => $id), 'fields' => array('BankAccount.calificacion', 'BankAccount.observacion', 'BankAccount.adjunto', 'BankAccount.id', 'BankAccount.proyect_id')));
        } else {

            if ($this->BankAccount->saveAll($this->data)) {

                $this->Session->setFlash('Registro editado correctamente', 'flash_custom');
                $this->redirect(array('controller' => 'BankAccounts', 'action' => 'index', $this->data['BankAccount']['proyect_id']));
            } else {
                $this->Session->setFlash('Error editando datos');
            }
        }
    }

    public function index() {
        App::Import('Model', 'Proyect');
        if ($this->RequestHandler->isAjax()) {
            $this->layout = "ajax";
        } else {
            $this->layout = "default";
        }
//Verifico si el proyecto ya fue publicado.
        $Proyect = new Proyect();
        $proyect_id = $this->Session->read('proy_id');

        if ($proyect_id != "") {
            $publicado = $Proyect->field('publicado', array('Proyect.id' => $proyect_id));

            if ($publicado == 1) {
                $this->set('proyect_id', $proyect_id);
                $this->paginate = array('BankAccount' => array('maxLimit' => 500, 'limit' => 50, 'recursive' => '-1', 'fields' => array('BankAccount.id', 'BankAccount.adjunto', 'BankAccount.tipo_cuenta', 'BankAccount.nombre_banco', 'BankAccount.numero_cuenta', 'BankAccount.nombre_titular', 'BankAccount.candidate_id', 'BankAccount.documento_titular')));
                $this->set('BankAccounts', $this->paginate('BankAccount', array('BankAccount.proyect_id' => $proyect_id, 'BankAccount.tipo_titular' => 'Beneficiario')));
            } else {
                $this->Session->setFlash('Este proyecto aún no ha sido publicado', 'flash_custom');
                $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
            }
        } else {
            $this->Session->setFlash('No ha seleccionado un proyecto', 'flash_custom');
            $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
        }
    }

    public function indexProperties($expense_property_id) {
        App::Import('Model', 'Proyect');
        App::Import('Model', 'ExpenseProperty');
        if ($this->RequestHandler->isAjax()) {
            $this->layout = "ajax";
        } else {
            $this->layout = "default";
        }

        //Verifico si el proyecto ya fue publicado.
        $Proyect = new Proyect();
        $subsidioPredio = new ExpenseProperty();
        $this->BankAccount->recursive = -1;
        $proyect_id = $this->Session->read('proy_id');

        if ($proyect_id != "") {
            $publicado = $Proyect->field('publicado', array('Proyect.id' => $proyect_id));

            if ($publicado == 1) {
                $this->set('proyect_id', $proyect_id);
                $this->set('expense_property_id', $expense_property_id);
                $this->set('valor_subsidio_predios', $subsidioPredio->field('valor', array('id' => $expense_property_id)));

                $this->paginate = array('BankAccount' => array('maxLimit' => 500, 'limit' => 50, 'fields' => array('BankAccount.id', 'BankAccount.adjunto', 'BankAccount.tipo_titular', 'BankAccount.nombre_banco', 'BankAccount.valor', 'BankAccount.nombre_titular', 'BankAccount.id', 'BankAccount.documento_titular')));
                $this->set('BankAccounts', $this->paginate('BankAccount', array('BankAccount.expense_property_id' => $expense_property_id)));
            } else {
                $this->Session->setFlash('Este proyecto aún no ha sido publicado', 'flash_custom');
                $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
            }
        } else {
            $this->Session->setFlash('No ha seleccionado un proyecto', 'flash_custom');
            $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
        }
    }

    public function delete($id, $expense_property_id) {
        if ($this->BankAccount->delete($id)) {
            $this->Session->setFlash(_("Cuenta bancaria borrada con éxito."));
            $this->redirect(array('controller' => 'BankAccounts', 'action' => 'indexProperties', $expense_property_id));
        }
    }

}

?>
